import SortableList from "react-native-sortable-list";
import {ComponentProps, ReactNode} from "react";
import {StyleProp} from "react-native";

// props参考:https://github.com/gitim/react-native-sortable-list/tree/master?tab=readme-ov-file#questions
export interface DragColumnsProps<T> {
    labelMaps?: Record<string, string>;
    data: T[];
    order?: string[];//数组中键的顺序将用于初始行顺序
    style?: StyleProp<any>;//
    contentContainerStyle?: StyleProp<any>;//样式将应用于内部滚动视图内容容器
    innerContainerStyle?: StyleProp<any>;//样式将应用于内部滚动视图内容容器，不包括页眉和页脚
    horizontal?: boolean;//当为 true 时，SortableList 的子级水平排列在行中，而不是垂直排列在列中。默认值为 false。
    showsVerticalScrollIndicator?: boolean;//垂直滚动指示器将不可见。默认值是true。
    sortingEnabled?: boolean;//  如果为 false，则行不可排序。默认值是true。
    scrollEnabled?: boolean;//  如果为 false，则行不可滚动。默认值是true。
    keyboardShouldPersistTaps?: "never" | "always" | "handled"; //确定键盘在点击后何时保持可见。
    manuallyActivateRows?: boolean;//手动激活行? 是否打算使用 toggleRowActive 方法来激活行或使用开箱即用的解决方案。
    autoscrollAreaSize?: number;//自动滚动区域大小？ (number) 确定将触发自动滚动的列表开头和结尾区域的垂直列表高度和水平列表宽度。默认为 60。
    rowActivationTime?: number;//行激活时间？ （数字）确定按下的行变为活动状态之前的时间延迟（以毫秒为单位）。默认为 200 毫秒。
    renderRow?: (props: SortItem) => ReactNode;//排序项渲染
    renderHeader?: () => ReactNode;//渲染页眉
    renderFooter?: () => ReactNode;//渲染页脚
    onChangeOrder?: () => void;//当排序顺序更改时调用
    onActivateRow?: (key: string | number) => void;//当行激活时调用
    onReleaseRow?: (key: string | number, currentOrder: T[]) => void;//当行释放时调用
    onPressRow?: (key: string | number) => void;//当按下一行时调用。
    onRemove?: (key: string | number) => void;
}

export interface SortItem {
    key: string | number;
    index: number;
    data: string;
    disabled: boolean;
    active: boolean;
    labelMaps?: Record<string, string>;
    onRemove?: (key: string | number) => void;
}

export interface DragColumnsInstance {
    scrollBy: (y: number, animated: boolean) => void;//按给定的 y 偏移量滚动，可以立即滚动，也可以使用平滑的动画
    scrollTo: (y: number, animated: boolean) => void;//按给定的 y 偏移量滚动，可以立即滚动，也可以使用平滑的动画
    scrollToRowKey: (key: string | number, animated: boolean) => void;//滚动到给定的行键，可以立即滚动，也可以使用平滑的动画
}